技术框架选型

Node特点及适用性

特点
  • 从2009年3月开始亮相,目前发展10+年
  • 事件驱动,轻量、松耦合、只关注事务点
  • 单线程(JavaScript代码执行),
    • 没有同步问题,没有死锁,没有线程切换的影响
    • 无法利用多核,一个错误会引起整个应用退出,健壮性有风险
      • 通过child_processClusterCluster2来解决
  • 异步非阻塞I/O,减少昂贵的I/O对CPU计算的影响,充分利用硬件资源
应用场景
  • 不太适合CPU密集型业务(也不差,可以通过分解业务解决),适合I/O密集型业务
    • 通过编写C/C++扩展或者child_process来解决
  • 前后端公用模板的系统

Web开发框架

包名称 github Star数 周下载量 上次发布时间 备注
express 46.4k 10,638,972 6 months ago
koa 28k 388,602 a month ago 备选
nest 25.6k 100,465
hapi 11.9k 148,441 3 months ago
restify 9.6k 103,575 7 days ago
fastify 12.7k 60,139 a day ago 文档中有对比数据
loopback 13k 48,179 6 months ago
egg 14.4k 6,750 2 days ago 基于koa,备选
sails 21k 37,670 6 months ago
micro 60,466 5 months ago 微服务框架
@feathersjs/feathers 11.9k 38,304 3 days ago
derby 4.5k 156 6 days ago
seneca 3.6k 8664 3 months ago 备选
  • Connect

    2010年开始出现,只是一个中间件层,后被用在Express和Koa中

  • Express

    2010年开始出现,继承了Connect的思想并内置了很多中间件,MEAN(MongoDB+Express+Angular+Node)非常流行

  • Koa

    2013年底,Express原班人马打造,解决Express异步中间件层级调用等问题,内部没提供中间件

  • Hapi

  • restify

  • fastify

  • LoopBack

  • eggjs

  • thinkjs

  • sails

  • micro

  • @feathersjs/feathers

  • derby

  • Seneca Node微服务框架

模板引擎

包名称 github Star数 周下载量 上次发布时间 备注
art-template 8.7k 30,801 a year ago 备选
velocityjs 506 166,655 2 months ago
pug 18.8k 543,078 6 months ago 原名jade
handlebars 15k 9,244,577 21 days ago 备选
mustache 13.5k 1,343,511 2 days ago
ejs 4k 4,601,778 15 days ago 备选
dot 4.4k 172,329 2 days ago
nunjucks 6.4k 242,099 9 months ago
  • art-template
  • velocityjs
  • Jade/pug
  • Handlebars
  • Mustache
  • Embedded JavaScript
  • dot
  • numjucks

这里有个对比 art-template 性能表现好

数据库框架

包名称 github Star数 周下载量 上次发布时间 备注
typeorm 16.5k 201,756 4 days ago
sequelize 20.6k 465,897 a month ago
knex 11k 412,470 a day ago
  • typeorm
  • Sequelize
  • knex

服务端渲染

  • Vue
    • vue-server-renderer
    • nuxtjs
    • quasar
  • React
    • react-dom/server
    • nextjs

实时通信

  • Websocket
  • WebRTC
  • Socket.IO

开发测试

编码规范

  • eslint
  • 安全编码
    • xss 转义输出
    • csrf 验证token

异常处理

  • try catch
    • 无法捕捉try 中异步异常
  • server on error
  • process on uncaughtException
  • domains(pending deprecated)
  • 结束进程
    • 避免抛出新异常
    • process.exit 结束进程
    • timmer.unref 避免timmer阻止进程退出
    • server.close 停止接收新连接
    • cluster.work.disconnect 关闭IPC通道

流程控制

  • async
  • step
  • wind
  • bagpipe

自动化测试

测试框架
  • 汇总 https://phantomjs.org/headless-testing.html
  • Karma
  • mocha
  • ava
  • jasmine
  • Vows async + BDD风格
  • SuperTest RESTful API
  • Sinon.JS
  • 端到端测试
    • CasperJS
      • PhantomJS SlimerJS
    • Protractor
    • Nightwatch
    • TestCafe
    • CodeceptJs
断言库
  • chai BDD风格+TDD风格
  • should.js BDD风格
  • expect.js BDD风格
  • assert TDD风格
覆盖率
  • istanbul
  • nyc

部署维护

服务进程管理

  • 简单比较
  • pm2
  • nodemon
  • forever
  • strong-pm
  • node-supervisor
  • upstart
  • init.d
  • systemd

服务监控

  • PM2
  • Keymetrics
  • 监控指标
    • 响应时间
    • 进程监控
    • 磁盘监控
    • 内存监控
    • CPU监控
    • 心跳监测
  • Node自带, process 相关信息
  • REPL 《node项目实践》
  • 《Node调试指南》
  • alinode

日志追踪

  • winston
  • bunyan
  • log
  • log4js
  • Patertrail
  • 中间件
    • morgan
    • express-winston

安全相关

  • 防止命令注入

持续集成和持续部署

  • Travis CI
  • Jenkins
  • strider

部署容器

  • Docker
  • kubernetes
  • chef
  • vagrant

最后更新: 2022年03月02日 03:32

原始链接: http://rawbin-.github.io/dev-env/2018-09-10-node-service-preview/

× 赞赏这个人~
打赏二维码